package cn.bearspark.happening.provider.dao.mapper;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Set;

/**
 * 用户预约直播的数据映射接口
 *
 * @author f
 */
@Mapper
public interface BookLiveUserMapper {

    /**
     * 添加指定用户预约指定直播的数据
     *
     * @param userId     指定的用户 id
     * @param bookLiveId 指定的直播预约 id
     */
    @Insert("INSERT INTO t_book_live_user (user_id, book_live_id) " +
            "VALUES (#{userId}, #{bookLiveId})")
    void insert(long userId, long bookLiveId);

    /**
     * 删除指定用户预约指定直播的数据
     *
     * @param userId     指定的用户 id
     * @param bookLiveId 指定的直播预约 id
     */
    @Delete("DELETE FROM t_book_live_user " +
            "WHERE user_id = #{userId} AND book_live_id = #{bookLiveId}")
    void delete(long userId, long bookLiveId);

    /**
     * 查询指定用户在指定预约直播中预约的直播
     *
     * @param userId         指定的用户 id
     * @param bookLiveIdList 指定的预约直播的 id 集合
     * @return 预约的直播的 id 集合，以 Set 的形式返回
     */
    Set<Long> getBookedLiveIdSet(long userId, List<Long> bookLiveIdList);

    /**
     * 统计指定用户 id 和预约直播 id 的数量
     *
     * @param userId     指定的用户 id
     * @param bookLiveId 指定的预约直播 id
     * @return 指定用户 id 和预约直播 id 的数量
     */
    @Select("SELECT COUNT(*) FROM t_book_live_user " +
            "WHERE user_id = #{userId} AND book_live_id = #{bookLiveId}")
    int count(long userId, long bookLiveId);
}
